File systems store and organize collections of data and information about the data (e.g., metadata). Discrete collections of data are referred to as objects. One familiar object is a file. File systems are generally arranged in a hierarchy. Arranging the objects in a hierarchy allows users to organize the objects. A hierarchical file system includes a root directory. A root directory may be the parent of a set of subdirectories. The subdirectories associated with the root directory may include further subdirectories. In this manner, subdirectories extend from the root directory to varying levels in the hierarchical file structure.
A pathway is defined by a series of subdirectories that are passed through from the root directory to arrive at an object (e.g., a subdirectory, file). Therefore, the pathway is a map through the hierarchical file system from the root directory to the object. The hierarchical file system may be used in a single system (e.g., a computer, node, data stream) or a system distributed over multiple nodes (e.g., network).
As computing systems become more robust, more objects can be stored in the hierarchical file system. Technological advances have made it possible for personal computers to have hundreds of gigabytes of storage and handheld devices (e.g., cellular phones, music playback devices, cameras) to have gigabytes of storage. Thus, the ability to store hundreds of thousands of objects is no longer limited to sophisticated entities. However, hierarchical file systems may succumb to the realities of limited storage, despite being able to store vast amounts of data due to, for example, limitations or inefficiencies associated with conventional file system data structures.
In addition to storing objects, metadata associated with the objects is stored. Objects may not automatically store data about themselves. Therefore, a file system may store the metadata for objects in inodes. When an object is created, a corresponding inode may be created by the file system. The inode stores metadata (e.g., author data, size data, timestamp) about the object. To determine the relationship between objects and inodes, an object is associated with a specific inode using an inode number. Inodes may be organized in an inode table. An inode number may represent an inode's location in the inode table.
An inode is used by the hierarchical file system to support requested operations pertaining to the object. Some operations cause the size of objects to change. For example, a save command may change the size of an object if the object has been altered. Changing the size of an object may have ramifications for other objects on the pathway. Thus, inodes for different objects on the pathway may need to change as the metadata associated with the object changes due to size altering operations. Conventionally, inodes are stored in the hierarchical file system. As inodes are changed, reads are executed on the computer storage medium. This can be inefficient and time consuming. The inodes may be distributed at different locations in the hierarchical file system, increasing the time and processing power needed to identify and locate them.
While the metadata of an inode may be relevant to performing an operation associated with an object, the information available in an inode may be inadequate to identify and locate additional inodes in the computer storage medium. The inode may contain metadata regarding one specific object but not other objects in the hierarchical file system. Furthermore, identifying and locating inodes stored in the hierarchical file system may be inefficient and slow.
A file system may have a large number of files and thus may have a large number of inodes. Just like some files may be in memory and other files may not be in memory (e.g., on disk, on disk), some inodes may be in memory while others are stored on relatively slower devices. Eviction, replacement, and pre-fetch processes may be tasked with determining which files and/or inodes should be stored in the limited memory available and which should be stored elsewhere.